פתרון תרגיל 4 יסודות מבני נתונים סמסטר א' תשע"ה שאלה 1:

Σχετικά έγγραφα
פתרון תרגיל מרחבים וקטורים. x = s t ולכן. ur uur נסמן, ur uur לכן U הוא. ur uur. ur uur

השאלות..h(k) = k mod m

חורף תש''ע פתרון בחינה סופית מועד א'

כלליים זמן: S מחסנית, top(s) ראש המחסנית. (Depth First Search) For each unmarked DFS(v) / BFS(v) רקורסיבי. אלגוריתם :BFS

תרגול פעולות מומצאות 3

Logic and Set Theory for Comp. Sci.

שדות תזכורת: פולינום ממעלה 2 או 3 מעל שדה הוא פריק אם ורק אם יש לו שורש בשדה. שקיימים 5 מספרים שלמים שונים , ראשוני. שעבורם

תאריך הבחינה: שם המרצה: רפי כהן שם המתרגל: יסודות מבני נתונים שם הקורס:

םינותנ ינבמ 3 ליגרתמ תולאשל המוד תולאש טסל תונורתפ תולאשה

פתרון תרגיל 8. מרחבים וקטורים פרישה, תלות \ אי-תלות לינארית, בסיס ומימד ... ( ) ( ) ( ) = L. uuruuruur. { v,v,v ( ) ( ) ( ) ( )

תורת הגרפים - סימונים

מבני נתונים 08a תרגול 8 14/2/2008 המשך ערמות ליאור שפירא

[ ] Observability, Controllability תרגול 6. ( t) t t קונטרולבילית H למימדים!!) והאובז' דוגמא: x. נשתמש בעובדה ש ) SS rank( S) = rank( עבור מטריצה m

חידה לחימום. כתבו תכappleית מחשב, המקבלת כקלט את M ו- N, מחליטה האם ברצוappleה להיות השחקן הפותח או השחקן השappleי, ותשחק כך שהיא תappleצח תמיד.

תרגיל 13 משפטי רול ולגראנז הערות

מתמטיקה בדידה תרגול מס' 13

לוגיקה ותורת הקבוצות פתרון תרגיל בית 8 חורף תשע"ו ( ) ... חלק ראשון: שאלות שאינן להגשה נפריד למקרים:

סדרות - תרגילים הכנה לבגרות 5 יח"ל

יסודות לוגיקה ותורת הקבוצות למערכות מידע (סמסטר ב 2012)

ל הזכויות שמורות לדפנה וסטרייך

פתרון תרגיל 5 מבוא ללוגיקה ותורת הקבוצות, סתיו תשע"ד

אלגברה ליניארית (1) - תרגיל 6

הגדרה: קבוצת פעילויות חוקית היא קבוצה בה כל שתי פעילויות

תכנון אלגוריתמים 2016 עבודה 1 שאלה 1 פתרון נתונות שתי בעיות. יש למצוא: אורך מסלול קצר ביותר המתחיל באחד מן הקודקודים s 1,..., s k ומסתיים ב t.

דף פתרונות 7 נושא: תחשיב הפסוקים: צורה דיסיונקטיבית נורמלית, מערכת קשרים שלמה, עקביות

תשובות מלאות לבחינת הבגרות במתמטיקה מועד ג' תשע"ד, מיום 0/8/0610 שאלונים: 315, מוצע על ידי בית הספר לבגרות ולפסיכומטרי של אבירם פלדמן

תרגול 1 חזרה טורי פורייה והתמרות אינטגרליות חורף תשע"ב זהויות טריגונומטריות

שאלה 1 V AB פתרון AB 30 R3 20 R

gcd 24,15 = 3 3 =

תאריך עדכון אחרון: 27 בפברואר ניתוח לשיעורין analysis) (amortized הוא טכניקה לניתוח זמן ריצה לסדרת פעולות, אשר מאפשר קבלת

מיונים א': מיון (Sorting) HeapSort. QuickSort תור עדיפויות / ערימה

אלגוריתמים / תרגיל #1

לדוגמה: במפורט: x C. ,a,7 ו- 13. כלומר בקיצור

אלגברה מודרנית פתרון שיעורי בית 6

לוגיקה ותורת הקבוצות פתרון תרגיל בית 4 אביב תשע"ו (2016)

מבני נתונים מבחן מועד ב' סמסטר חורף תשס"ו

תוכן הפרק: ,best case, average case דוגמאות 1. זמן - נמדד באמצעות מס' פעולות סיבוכיות, דוגמאות, שיפור בפקטור קבוע האלגוריתם. וגודלם. איטרטיביים. לקלט.

= 2. + sin(240 ) = = 3 ( tan(α) = 5 2 = sin(α) = sin(α) = 5. os(α) = + c ot(α) = π)) sin( 60 ) sin( 60 ) sin(

( )( ) ( ) f : B C היא פונקציה חח"ע ועל מכיוון שהיא מוגדרת ע"י. מכיוון ש f היא פונקציהאז )) 2 ( ( = ) ( ( )) היא פונקציה חח"ע אז ועל פי הגדרת

מבני נתונים ואלגוריתמים תרגול #8-9

משוואות רקורסיביות רקורסיה זו משוואה או אי שוויון אשר מתארת פונקציה בעזרת ערכי הפונקציה על ארגומנטים קטנים. למשל: יונתן יניב, דוד וייץ

תרגול מס' 6 פתרון מערכת משוואות ליניארית

רשימת בעיות בסיבוכיות

Hash Tables (המשך) ערבול (Hashing)

' 2 סמ ליגרת ןורתפ םיפרגה תרותב םימתירוגלא דדצ 1 : הלאש ןורתפ רבסה תורעה

logn) = nlog. log(2n

מבני נתונים מבחן מועד א' סמסטר אביב תשס"ו

מבני נתונים אדמיניסטרציה ד"ר אלכס סמורודניצקי, רוס 210, שני 5:30 4:15. ציון:

Nir Adar

מיון. 1 מיון ערימה (Heapsort) חלק I 1.1 הגדרת ערימה 0.1 הגדרה של המושג מיון מסקנה: הערך הכי גבוה בערימה נמצא בשורש העץ!

מתכנס בהחלט אם n n=1 a. k=m. k=m a k n n שקטן מאפסילון. אם קח, ניקח את ה- N שאנחנו. sin 2n מתכנס משום ש- n=1 n. ( 1) n 1

brookal/logic.html לוגיקה מתמטית תרגיל אלון ברוק

{ : Halts on every input}

מבני נתונים. אחרי שלב זה המשיכו והריצו את מיון מהיר על המערך. תארו את כל שלבי הרקורסיה, אך עתה אין צורך להיכנס לתיאור הריצה של.

מבני נתונים מבחן מועד א' סמסטר חורף תשס"ו

אלגוריתמים בתורת הגרפים חלק ראשון

( n) ( ) ( ) שאלה 1: שאלה 2: שאלה 3: (n 5) = Θ. ב. אם f 1, f 2, g 1, g 2. .g 1 *g 2 = Ω(f 1 *f 2 ) , g. ג. ) n.n! = θ(n*2. n) f ( אז ד. אם ה. אם ו.

מבחן מועד ב' בהצלחה! אנא קיראו היטב את ההוראות שלהלן: ודאו כי כל עמודי הבחינה נמצאים בידכם.

תרגיל 7 פונקציות טריגונומטריות הערות

חלק א' שאלה 3. a=3, b=2, k=0 3. T ( n) היותר H /m.

áùçîä éòãîì äîâîä ÌÈÏÈ ÂÁ

צעד ראשון להצטיינות מבוא: קבוצות מיוחדות של מספרים ממשיים

מבני נתונים הגבלת אחריות פרק - 1 אלגוריתמי מיון ואנליזה אסימפטוטית. מיון בועות Sort Bubble מאת : סשה גולדשטיין,

גבול ורציפות של פונקציה סקלרית שאלות נוספות

אלגברה לינארית (1) - פתרון תרגיל 11

מבני נתונים. (ב) ואז הוא הופך למערך המייצג את האינדקס האחרי אחרון של כל מספר: c

קבוצה היא שם כללי לתיאור אוסף כלשהו של איברים.

פתרון תרגיל 6 ממשוואות למבנים אלגברה למדעי ההוראה.

מבני נתונים (234218) 1

סיכום בנושא של דיפרנציאביליות ונגזרות כיווניות

חידה לחימום. כתבו תכנית שהקלט שלה הוא מספר שלם n,

מודלים חישוביים פתרון תרגיל 5

אלגוריתמים 1, סמסטר אביב 2017

אלגברה ליניארית 1 א' פתרון 2

s ק"מ קמ"ש מ - A A מ - מ - 5 p vp v=

3-9 - a < x < a, a < x < a

Charles Augustin COULOMB ( ) קולון חוק = K F E המרחק סטט-קולון.

מבני נתונים ואלגוריתמים תרגול #3 נושאים: תור קדימויות/ערימה, עצים

תוכן עניינים I בעיות מיון 2 1 סימון אסימפטוטי... 2 II מבני נתונים 20 8 מבני נתונים מופשטים משפט האב גרפים... 37

ניתוח סיבוכיות - פונקציות רקורסיביות פיתוח טלסקופי

אסימפטוטיים תוכנית הקורס עצי AVL עצי 2-3 עצי דרגות סיבוכיות משוערכת מיון מיון שימושים: גרפים איסוף אשפה

פתרון תרגיל בית 6 מבוא לתורת החבורות סמסטר א תשע ז

מבני נתונים ויעילות אלגוריתמים

TECHNION - ISRAEL INSTITUTE OF TECHNOLOGY DEPARTMENT OF COMPUTER SCIENCE סמסטר אביב תשס"ו מס' סטודנט:

מודלים חישוביים מבחן מועד א', סמסטר א' תשע''ה (2015)

דוגמה: יהי T עץ בינארי כפי שמתואר בציור הבא:

שיטות אנליזה לניתוח זמנים משוערך Amortized Time Analysis

אוניברסיטת בר אילן מבני נתונים תרגולים מרצה: פרופ' שמואל טומי קליין סמסטר ב', תש"ע

תרגול 8: מטלאב לולאות

אלגוריתמים קומבינטוריים סיכומים של תרגילי כיתה מסמסטרים קודמים בנושא מיון ובעיית הבחירה

(2) מיונים השאלות. .0 left right n 1. void Sort(int A[], int left, int right) { int p;

מתמטיקה בדידה תרגול מס' 5

אלגברה ליניארית 1 א' פתרון 7

אוסף שאלות מס. 3 פתרונות

הגדרה: מצבים k -בני-הפרדה

c ארזים 26 בינואר משפט ברנסייד פתירה. Cl (z) = G / Cent (z) = q b r 2 הצגות ממשיות V = V 0 R C אזי מקבלים הצגה מרוכבת G GL R (V 0 ) GL C (V )

השאלות ידי מצביעים לילדים.

קיום ויחידות פתרונות למשוואות דיפרנציאליות

עץץץץ AVL. עץ AVL הוא עץ חיפוש בינארי שמקיים את התנאי הבא: לכל צומת x בעץ גורם האיזון של x הוא 1, 0, או 1-. הגדרה: במילים אחרות: לכל צומת x בעץ,

. {e M: x e} מתקיים = 1 x X Y

Transcript:

פתרון תרגיל 4 שאלה 1: הציעו דרך לממש תור )FIFO( באמצעות ערימה, תשובתכם צריכה לכלול פסאודו-קוד, המתאר את הפעולות הבאות: isempty(),enqueue(x), dequeue(), בנוסף נתחו זמן ריצה במקרה הגרוע ביותר עבור כ"א מהפעולות הנ"ל. תיאור המבנה: משתנה בשם counter המאותחל ל- 0. ערימת מינימום H, בה איברים מאוחסנים לפי ערך ה- counter בעת הכנסתם. אחרי כל הכנסה counter גדל ב- 1. כלומר לכל איבר חדש שמכניסים למבנה מוסיפים שדה key השווה לערך הנוכחי של ה- counter. זמן ריצה (1)O. זמן ריצה (n,o(log כאשר n מספר איברים במבנה. זמן ריצה (n,o(log כאשר n מספר איברים במבנה. טעויות נפוצות: isempty() return H.size == 0 enqueue(x) HeapNode newnode = (x, counter) counter = counter +1 H.insert(newNode) dequeue(x) return H.extractMin().value מימוש וריאציות של שיטות מה ADT ערימה, כגון Heapify, ExtractMin במקום להשתמש בהן.as is לא מוסיפים מפתח לאיבר בעת הכנסה. הכנסת איבר חדש בצורה ישירה לסוף המערך )מבלי להצמיד לו מפתח(- חוץ מזה שיש כאן הפרה של הממשק ערימה )יש להשתמש ב,)insert עלולה להיווצר בעיה בעת מחיקת איבר מהערימה וביצוע.heapify עדכון counter->counter-1 בפעולת הוצאה. מפר סדר FIFO אם מבצעים מספר הוצאות ואז הכנסה, בנוסף עלולים לקבל כפילויות של מפתחות. שימוש ב heap-size בתור המפתח- גם כאן עלולה להיווצר אותה הבעיה כמו בסעיף הקודם.

שאלה 2: בישוב "סנסנה" נפתחה פיצרייה חדשה. בישוב כביש יחיד וישר כאשר כל בתי היישוב נמצאים לאורכו. הפיצרייה נפתחה בקצה הכביש. הפיצרייה מבצעת משלוחים לבתי הלקוחות. נניח שכל הזמנה שמתקבלת מכילה את הנתונים הבאים: זמן ההזמנה, כמות הפיצות, סוג כל פיצה ומרחק היעד מהפיצרייה כאשר המרחקים הם מספרים שלמים חיוביים. הפיצרייה מעוניינת לנהל את שירות המשלוחים שלה בצורה היעילה ביותר. לכן מנהלי הפיצרייה החליטו על החוקים הבאים בהוצאת משלוחים: אם קיימות הזמנות שמחכות בתור כבר חצי שעה או יותר אז יש להוציא משלוח בהול רק עבור ההזמנה הישנה ביותר. אחרת, ההזמנה הבאה שתצא תהיה ליעד הקרוב ביותר לפיצרייה. יחד איתה במשלוח יצאו כל ההזמנות במרחק 3 ממנה )מרחקים הם מספרים שלמים חיוביים שונים זה מזה(. הציעו מבנה נתונים בגודל O(n) עבור ניהול המשלוחים בזמנים הבאים:.O(n) הזמנות בזמן n אתחול: אתחול המבנה בתחילת יום עם פרטי המשלוח הבא: פירוט כמות וסוג הפיצות שיצאו במשלוח הבא )ליעד אחד או יותר(, ללא הוצאה מהמבנה, בזמן (1)O. ניתן להניח כי לאחר פעולה זו לא מתבצעת הכנסה אלא רק הוצאה..O(logn) הוצאה: הוצאת המשלוח הבא )ליעד אחד או יותר( ע"פ החוקים שנקבעו בזמן הכנסה: הכנסת הזמנה חדשה למבנה בזמן O(logn) כאשר n הוא מספר ההזמנות במבנה. ניתן להניח כי כל ההזמנות המתקבלות הן ליעדים שונים, כלומר מרחק היעד של כל הזמנה מהפיצרייה הוא שונה. תארו את מבנה הנתונים, הסבירו כיצד תבצעו כל פעולה ונתחו את זמני הריצה. נחזיק שתי ערמות מינימום. ערמה ראשונה לפי זמן ההגעה של ההזמנה, והערמה השנייה ע"פ המרחק. כל הזמנה שמתווספת למבנה הנתונים, תוכנס לשתי הערמות. כמו כן נחזיק מצביעים הדדיים בין הערמות. כל איבר יצביע לעותק שלו בערמה השנייה. אתחול בניית שתי הערמות, הכנסת n איברים לשתי הערמות ועדכון המצביעים-.O(n) הכנסת הזמנה הוספת ההזמנה לשתי הערמות ועדכון המצביעים בין שני עותקי ההזמנה- O(logn) הוצאת הזמנה נבדוק את ראש הערמה הממוינת לפי זמן. אם מזמן ההזמנה עברו 30 דקות או יותר, נוציא את ההזמנה מראש הערמה )ואת העותק מהערמה השנייה(. אחרת נבצע מחיקה של האיבר בראש ערמת המרחקים,)ExtarctMin( ונמשיך להוציא שבראש הערמה ימצא איבר שרחוק יותר מ 3 יחידות מהאיבר הראשון שהוצאנו )כמובן שכל איבר שיוצא מערמת המרחק יוצא מערמת הזמן בעזרת המצביע(. כיוון ש- 3 קבוע והמרחקים שלמים, סה"כ זמן ההוצאה.O(3logn)=O(logn)

פרטי משלוח הבא נבדוק את ראש הערמה הממוינת לפי זמן. אם מזמן ההזמנה עברו 30 דקות או יותר, נחזיר את ההזמנה. אחרת ניצור רשימה להחזרה באופן הבא: נוסיף לרשימה את ראש ערמת המרחקים, ונסרוק את הערמה באופן הבא- לכל איבר ברשימה )שתגדל באופן טיפוסי אחרי כל איטרציה(, נבדוק את שני בניו. כל בן שמרחקו מהאיבר הראשון שהכנסנו קטן או שווה 3 יתווסף לרשימה. במקרה הגרוע נכניס לרשימה 4 איברים ונסרוק גם את שני הבנים של כל איבר ברשימה. סה"כ (1)O. טעויות נפוצות אין ציון מפורש של קיום מצביעים הדדיים בין שתי הערימות- הכרחי כדי לעמוד בזמן ריצה O(logn) עבור פעולת ההוצאה. שימוש בערימת מקס' עבור זמני המתנה- דורש עדכון של כל איברי הערימה בכל "טיק" של השעון. פירוט של ביצוע heapify או פירוט מימוש פנימי של ערימה- מיותר ומסורבל. יש להשתמש בממשק ערימה מבלי להיכנס לפרטי המימוש. שאלה 3: f(k) = k mod m נניח כי נתונה לנו טבלת גיבוב בגודל 13=m. א. ציירו את טבלת הגיבוב לאחר הכנסת המפתחות הבאים )משמאל לימין(: 16,7,32,4,9,19,45,39,21,3 הטבלה מנוהלת בשיטת Chaining עם פונקציית הגיבוב הבאה: addressing) (open עם גיבוב כפול נתונה טבלת הגיבוב הבאה המנוהלת בשיטת מיעון פתוח.(double hashing) 0 1 2 3 4 5 6 7 8 9 39 75 35 42 23 45 ב. המפתחות הוכנסו לטבלה ריקה מלכתחילה תוך שימוש בפונקצית הגיבוב הבאה: h(k, i) = (h 1 (k) + i*h 2 (k)) mod 10 h 1 (k) = k mod 10 h 2 (k) = k/10 mod 10 כאשר: רשמו )משמאל לימין( את סדר הכנסת המפתחות.

א( ב( סדר ההכנסה: 35,45,39,42,75,23 0 39 1 2 3 4 5 6 7 8 9 10 11 12 3 16 4 45 19 32 7 21 9 שאלה 4: א. במיון מניה הלולאה האחרונה רצה מ- N ל- 1: for jn to 1 B[C[A[j]]]A[j] C[A[j]]C[A[j]]-1 במידה ונשנה את זה את הסדר בו רץ המונה למ 1 עד N, האם האלגוריתם עדיין ימיין את המערך נכון? אם לא, הסבירו מדוע, אחרת, הסבירו האם עדיפה הריצה המקורית או הריצה המוצעת בסעיף זה. המערך תוצאה אכן יהיה ממוין, אך תכונת היציבות )stability( לא תשמר. ישנם מקרים בהם תכונה זאת חשובה )כמו למשל ב,)radix sort ולכן נעדיף את הריצה בסדר המקורי. a i, a j כך ש- ב. נתונים n מספרים a 1, a 2,, a n ממשיים בתחום.[0,2k] ידוע כי לכל זוג מספרים a i a j k מתקיים: i j n תארו אלגוריתם הממיין את המספרים במערך בזמן ריצה O(n) במקרה הגרוע ביותר. שימו לב: k יכול להיות גדול בהרבה מ- n, ולכן זמן ריצה, למשל, (k O(n + אינו מספיק טוב. נבצע מיון דלי. כלומר, האלגוריתם מבצע חלוקה של התחום [0,2k] ל- n דליים, מחלק את n המספרים לדליים, ממיין כל דלי בנפרד ומשרשר את המספרים הממוינים. 2n נשים לב שגודל כל דלי הוא ולכן ע"פ הנתון לכל דלי נכנסים לכל היותר 2 איברים, ולכן מיון כל k אחד מהדליים יתבצע במקרה הגרוע בזמן (1)O. אם מוסיפים לכך את החלוקה לדליים והשרשור נקבל שזמן ריצת האלגוריתם במקרה הגרוע הוא.O(n)

שאלה 5: א. חציון של קבוצת מספרים הוא האיבר שחצי מהאברים גדולים ממנו וחצי מהאיברים קטנים ממנו. נניח ונתון אלגוריתם findmed(a) למציאת חציון של מערך A המכיל n מספרים בזמן O(n) במקרה הגרוע. הפונקציה findmed(a) מחזירה את האינדקס של החציון ב A. 1. הציעו מימוש )פסאודו-קוד או תיאור האלגוריתם במילים( ל partition המשתמש באלגוריתם ה -.findmed(a) 2. מה הוא זמן ריצת אלגוריתם partition שהצעתם בסעיף הקודם )סעיף 1( במקרה הגרוע? 3. מה יהיה זמן ריצת quick sort המשתמש ב partition שהצעתם למיון n איברים במקרה הממוצע? 4. מה יהיה זמן ריצת quick sort המשתמש ב partition הנ"ל למיון n איברים במקרה הכי גרוע? Partition(A,p,r) x findmed(a[p r]) i p-1 j r+1 while(true){ repeat j j-1 until A[j] x } repeat i i+1 until A[i] x if i < j swap(a[i],a[j]) else return(j) 2. Θ(n) בדומה ל partition המקורי. findmed לא מגדילה את הזמן הריצה האסימפטוטי..3 n) Θ(n log בדומה לניתוח של quicksort המקורי. logn גם כן. מכיוון שהציר שנבחר בכל שלב מחלק את המערך בדיוק בחצי, לאחר Θ(n log (n 4. שלבים נגיע למערכים בגודל (1)O. ב. מוצע לשכלל את bucket sort למיון רקורסיבי כדלהלן: מצא את תחום ערכי המפתחות, חלק את התחום ל - n חלקים שווים, פזר מפתחות ובמידה ויש bucket בו יותר מ - k מפתחות )k ניתן כפרמטר ולא ניתן להניח כי הוא קבוע(, חלק את תחום ה - bucket הזה למספר המפתחות ב - bucket הזה בצורה רקורסיבית. מהו זמן המיון המקסימאלי בהנחה שכל המפתחות שונים זה מזה? מהו זמן המיון הממוצע בהנחה שכל המפתחות שונים זה מזה?.2 זמן המיון במקרה הגרוע הוא ) 2,Θ(n וזה במקרה בו גודל הקלט קטן ב- 1 בכל קריאה רקורסיבית. כלומר, בכל שלב 1 n k = נכנסים 1 k מפתחות לדלי הראשון ומפתח אחד לאחרון )או הפוך(. במקרה הממוצע, תחת הנחת פילוג אחיד, ייקח Θ(n) בדומה ל sort bucket רגיל..2

שאלה 6: יהי נתון גרף מכוון G המיוצג באמצעות רשימות סמיכויות )שכנויות(. להלן הצעה לאלגוריתם שבודק האם בגרף G קיים מעגל: כל עוד יש ב - G קודקוד v שדרגת היציאה שלו היא 0 )קודקוד זה כמובן לא יכול להיות 1. שייך לשום מעגל ב G(: v. את כל הקשתות הנכנסות ל- G הסר מ a..v את G הסר מ.b אם הגרף שמתקבל הוא גרף ריק )ללא קודקודים( החזר "הגרף חסר מעגלים" אחרת 2. החזר "יש מעגל בגרף". )כלומר, אם אתם חושבים שהאלגוריתם נכון הסבירו במשפט או א. האם האלגוריתם נכון? נמקו שתיים מדוע במקרה שהגרף המתקבל בסוף ביצוע האלגוריתם אינו ריק הוא חייב להכיל מעגל, אחרת אם אתם חושבים שהאלגוריתם לא נכון תנו דוגמה סותרת(. בכל מקרה, בין אם האלגוריתם נכון ובין אם לאו, תארו מימוש שלו הרץ בזמן ( E.O( V + ב. תארו קודם את מבני העזר שברצונכם ליצור וכיצד תאתחלו אותם, ורק לאחר מכן תארו את המימוש שאתם מציעים. הכוונה: על מבני העזר לאפשר שתי פעולות: בחירה של קודקוד בעל דרגת יציאה 0 בזמן ריצה של in כאשר,O(in deg ((v) בזמן ריצה v ומחיקת כל הקשתות הנכנסות לקודקוד נתון (1)O v. היא דרגת הכניסה של deg (v) סעיף א' האלגוריתם נכון. נתחיל טיול מקודקוד כלשהו בגרף הלא ריק שנותר לאחר הרצת האלגוריתם. כיוון שדרגת היציאה של כל הקודקודים שונה מאפס, מכל קודקוד שנגיע )כולל הקודקוד ממנו התחלנו( נוכל לעבור לקודקוד נוסף וליצור מסלול ארוך כרצוננו. אבל מספר הקודקודים בגרף סופי, לכן סופו של דבר שנהיה חייבים לחזור לאותו קודקוד שוב. כלומר הגרף הלא ריק מכיל מעגל. קל וחומר הגרף המקורי. סעיף ב' תיאור מבנה העזר לבחירת קודקוד עם דרגת יציאה 0 בזמן ריצה של (1)O ודרך אתחולו: נרוץ על רשימות השכנים ונאסוף את הקודקודים שרשימת השכנים שלהם ריקה לרשימה חדשה, Z, קודקודים שדרגת היציאה שלהם היא 0. זמן יצירה.O( V ) של תיאור מבנה העזר למחיקת כל הקשתות הנכנסות אל קודקוד נתון v בזמן ((v) O(in deg ואופן אתחולו: נעבור על רשימות השכנים של הגרף הנתון G וניצור מערך B של רשימות ובו כניסה לכל קודקוד i בגרף המקורי. ברשימה שבכניסה B[i] נכניס את קבוצת הקשתות הנכנסות לקודקוד i בגרף המקורי G. חוליה ברשימות האלה תצביע על החוליה הרלוונטית ברשימת השכנויות המקורית )שמייצגת את הגרף(. זמן יצירה.O( V + E ) תיאור האלגוריתם: נסמן ב A את מערך השכנויות שמייצג את הגרף הנתון. ניצור את שני המבנים שלעיל. כל זמן ש- Z אינה ריקה נשלוף קודקוד i מראש הרשימה מ- Z. a. נרוץ על הרשימה B[i] ונמחק את כל הקודקודים )ברשימות השכנים במערך A( אליהם מצביעות חוליות הרשימה.B[i].2.3

b. בכל מקרה בו כניסה במערך A הופכת ל-,null כתוצאה ממחיקת החוליה האחרונה שלה, נוסיף את האינדקס של הכניסה המתאפסת לרשימה Z. 4. כשנסיים נחזיר "אין מעגל" אם ורק אם כל הכניסות במערך A שוות ל-.null ניתוח זמן ריצה: שלב 3 מבצע לכל היותר O( V ) איטרציות. איטרציה יחידה יכולה לעלות,O( V ) אבל אם מסתכלים על כל האיטרציות יחדיו, בסה"כ נראה שכל קשת נבחנת בדיוק פעם אחת. לכן סה"כ מקבלים זמן ריצה של ( E.O( V +